/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modeles.beans;

import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import modeles.Produit;
import modeles.Produits;
import modeles.servicesClient.ServicesProduits;
import modeles.servicesClient.ServicesRecettes;

/**
 *
 * @author Fred
 */
@ManagedBean
@ViewScoped
public abstract class FormulaireRecette implements Serializable {

    private final ServicesRecettes servicesRecettes;
    private final ServicesProduits servicesProduits;
    private List<Produit> produits;
    private Produits ingredientSelectionne;
    private Produit produitSelectionne;
    private float quantite;

    /**
     * Creates a new instance of FormulaireRecette
     */
    public FormulaireRecette() {
        this.servicesRecettes = new ServicesRecettes();
        this.servicesProduits = new ServicesProduits();
        quantite = 1f;
    }

    protected abstract List<Produits> getIngredients();

    protected ServicesRecettes getServicesRecettes() {
        return servicesRecettes;
    }

    public List<Produit> getProduits() {
        if (produits == null) {
            produits = servicesProduits.getProduits();
        }
        return produits;
    }

    public Produits getIngredientSelectionne() {
        return ingredientSelectionne;
    }

    public void setIngredientSelectionne(Produits ingredientSelectionne) {
        this.ingredientSelectionne = ingredientSelectionne;
    }

    public Produit getProduitSelectionne() {
        return produitSelectionne;
    }

    public void setProduitSelectionne(Produit produitSelectionne) {
        this.produitSelectionne = produitSelectionne;
    }

    public float getQuantite() {
        return quantite;
    }

    public void setQuantite(float quantite) {
        this.quantite = quantite;
    }

    public void ajouterIngredient() {
        if (produitSelectionne != null) {
            Produits produit = new Produits();
            produit.setProduit(produitSelectionne);
            produit.setQuantite(quantite);
            getIngredients().add(produit);
            produits.remove(produitSelectionne);
            produitSelectionne = null;
        }
    }

    public void supprimerIngredient() {
        if (ingredientSelectionne != null) {
            produits.add(ingredientSelectionne.getProduit());
            getIngredients().remove(ingredientSelectionne);
            ingredientSelectionne = null;
        }
    }

    protected void ajouterMessage(String msg, FacesMessage.Severity severity) {
        FacesMessage message = new FacesMessage(msg);
        if (severity != null) {
            message.setSeverity(severity);
        }
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    
    protected boolean checkIngredient() {
        if (getIngredients().isEmpty() || getIngredients() == null) {
            ajouterMessage("La liste d'ingrédients ne peut pas être vide.", FacesMessage.SEVERITY_ERROR);
            return false;
        }
        return true;
    }
}
